/*
 * Registro.cpp
 *
 *  Created on: Sep 20, 2010
 *      Author: nicoabie
 */

#include "Registro.h"



Registro::Registro()
{
	this->key = "";
	this->dato = "";
	this->tamanioKey = 0;
	this->tamanioDato = 0;


}

Registro::Registro(string key, string dato)
{
	this->key = key;
	this->dato = dato;
	this->tamanioKey = strlen(key.c_str());
	this->tamanioDato = strlen(dato.c_str());
}

Registro::Registro(string* stream)
{
	this->fromString(stream);
}



string Registro::getDato() const{
	return this->dato;
}

string Registro::getKey() const{
	return this->key;
}

int Registro::getTamanio(){
	int tamanio=0;
	tamanio += strlen(this->dato.c_str());
	tamanio += strlen(this->key.c_str());
	tamanio += CANTIDAD_BYTES_TAMANIO_DATO_Y_KEY;
	tamanio += CANTIDAD_BYTES_TAMANIO_DATO_Y_KEY;
	return tamanio;
}

int Registro::compararCon(Registro* otroRegistro){
	return strcmp(this->key.c_str(),otroRegistro->key.c_str());
}

string Registro::toString(){

	string stream="";

	stream += Utils::IntToString(this->tamanioKey,4);
	stream += key;
	stream += Utils::IntToString(this->tamanioDato,4);
	stream += dato;

	return stream;

}

void Registro::fromString(string* stream)
{
	/*
	 * Se hidrata del archivo donde su orden es:
	 * 				<tamanioKey><Key><tamanioDato><Dato>
	 */
	this->tamanioKey = Utils::StringToInt(stream->substr(0,CANTIDAD_BYTES_TAMANIO_DATO_Y_KEY));
	this->key = stream->substr(CANTIDAD_BYTES_TAMANIO_DATO_Y_KEY,this->tamanioKey);
	this->tamanioDato = Utils::StringToInt(stream->substr(CANTIDAD_BYTES_TAMANIO_DATO_Y_KEY + this->tamanioKey,CANTIDAD_BYTES_TAMANIO_DATO_Y_KEY));
	this->dato = stream->substr(2 * CANTIDAD_BYTES_TAMANIO_DATO_Y_KEY + this->tamanioKey,this->tamanioDato);

	stream->erase(0,this->getTamanio());
}



Registro::~Registro()
{
	// TODO hacer el destructor de registro
}


















